/**
 * 给定数组A和B，第i次可以从数组A当前剩下的段中的左右端点之一取一个数
 * 得分是取出的 a * Bi
 * 问总分最大是多少
 * 可以设 Dise 是第i轮取A[s...e]的最大值
 * 但是规模在1E4，就T了。注意到定下i和s之后，e其实是固定的，因此只要Dis即可
 * 令Dis是第i轮从s开始取的最大值，则
 * Dis = max(D[i+1][s+1]+Bi*As, D[i+1][s]+Bi*A[N+s-i])
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;
using pii = pair<int, int>;
using pll = pair<llt, llt>;

llt const INF = 0x7F1F2F3F4F5F6F7F;

int N;
vi A, B;
vector<vi> D;

int dfs(int round, int start){
    if(N + 1 == round) return 0;
    if(-1 != D[round][start]) return D[round][start];

    auto & d = D[round][start];
    d = max(dfs(round + 1, start + 1) + A[start] * B[round], dfs(round + 1, start) + A[N+start-round] * B[round]);
    return d;
}

void work(){ 
    cin >> N;
    A.assign(N + 1, {});
    B.assign(N + 1, {});
    for(int i=1;i<=N;++i) cin >> A[i];
    for(int i=1;i<=N;++i) cin >> B[i];

    D.assign(N + 1, vi(N + 1, -1));
    
    cout << dfs(1, 1) << endl;
	return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
	cin >> nofkase;
	while(nofkase--) work();
	return 0;
}